Google Cloud Shellのプロジェクトをpecoで変更する

Google Cloud Shellのプロジェクトをpecoで変更する

Clock Icon2022.12.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

データアナリティクス事業本部のはんざわです。

みなさんはCloud Shellを使っていますか?

Cloud Shellは、ブラウザから場所を問わずにアクセスできる、オンラインの開発および運用環境です。gcloudコマンドラインツールやkubectlなどのユーティリティがプリロードされたオンラインターミナルを使用して、リソースを管理できます。

公式ドキュメントより引用

自分はCloud Shellを多用しています。
gcloudコマンドでサービスのデプロイや管理をしたり、Terraformで使ったりしています。

自分の場合、検証や本番に加えて、会社の自分の環境やチームの環境などたくさんのプロジェクトがあります。 それぞれのプロジェクトに切り替えるたびにgcloud config set project PROJECT_IDを入力するのは非常に手間です。
自分はオープンソースサービスであるpecoを使用し、簡単に切り替えられるようにしているのでその方法を紹介したいと思います。

pecoとは

pecoはインタラクティブフィルターツールの一種で似たものにfzfがあります。
インタラクティブフィルターツールとは、ユーザーが与えた標準入力を受け取り、その中から選択したものを標準出力として出力します。
例として、ls | pecoのようにpecoコマンドをパイプで渡すとこのような画面に変わります。

この中から選んだものが出力されます。

main.pyを選択し、出力されました。

https://github.com/peco/peco

Cloud Shellにpecoをインストールする

以下の手順でCloud Shellにpecoをインストールしました。

mkdir ~/bin
cd ~/bin
# https://github.com/peco/peco/releases このURLから最新版のバージョンを見つけてください
sudo wget https://github.com/peco/peco/releases/download/v0.5.10/peco_linux_amd64.tar.gz
sudo tar xzvf peco_linux_amd64.tar.gz
sudo rm -f peco_linux_amd64.tar.gz
cd peco_linux_amd64
sudo chmod +x peco
mv ./peco ../
sudo rm -rf peco_linux_amd64/

インストールした後に再度CloudShellに繋ぎ直して、pecoと実行し、Error: failed to setup input source: you must supply something to work with via filename or stdinとエラーを吐けばインストール成功です。

注意点

Cloud Shellは$HOME配下のみ永続ディスクストレージの扱いになっています。そのため一定時間経過するとそれ以外のディレクトリはリセットされてしまいます。そのため今回のようにホームディレクトリ配下にbinを作成し、その中にインストールしています。
また、5GBまでの制限があるのでその点も注意が必要です。

https://cloud.google.com/shell/docs/configuring-cloud-shell?hl=ja#configuration_files_in_your_home_directory

pecoでGoogle Cloudのプロジェクトを切り替える

早速ですがコードは以下のようになっており、bashrcファイルに記載してあります。

function gpr {
    project=$(gcloud projects list | grep "PROJECT_ID" | awk -F " " '{ print $2 }' | peco)
    gcloud config set project ${project}
}

gprという名前で関数を登録しています。
コマンドラインからgprと入力すればプロジェクトの選択&切り替えができます。

まとめ

Cloud Shellでプロジェクトを簡単に切り替える方法を紹介しました。
このやり方は他のことにも応用できると思うので是非試してみてください。
将来的にはfzfに変更してみたり、configurationsも試してみたいと思っています。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.